<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Контроллер блока гостевой книги
 *
 * @package   block_guestbook
 * @copyright 2014 Massa
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

// Подключаем конфигурацию и описание формы
require_once('../../config.php');
require_once('gbook_forms.php');

// Предоставляем глобальный доступ к основным переменным для работы с блоком в Moodle 

global $DB, $OUTPUT, $PAGE, $COURSE;

// Показательно инициализируем переменные для обращения к курсу и экземпляру блока
// В демонстрационном блоке не используются - оставляем для будущего расширения
$courseid = optional_param('courseid', 1, PARAM_INT);
$blockid = optional_param('blockid', 0, PARAM_INT);

// Инициализируем ссылку для редиректа на контроллер
$gbookurl = new moodle_url('/blocks/guestbook/gbook.php');	

// Еще один показательный пример: проверка валидности блока для данного курса
// В демонстрационном блоке не используются - оставляем для будущего расширения
if (!$course = $DB->get_record('course', array('id' => $courseid))) {
    print_error('invalidcourse', 'block_guestbook', $courseid);
}

// Заставляем проходить аутентификацию, чтобы пользоваться гостевой книгой
require_login($course);

// Инициализируем внешний вид главной страницы блока гостевой книги
$PAGE->set_url('/blocks/guestbook/gbook.php', array('id' => $courseid));
$PAGE->set_pagelayout('standard');
$PAGE->set_heading(get_string('pluginname', 'block_guestbook'));

// Инициализируем навигацию для блока гостевой книги
// В демонстрационном блоке настройки не используются - оставляем для будущего расширения
$settingsnode = $PAGE->settingsnav->add(get_string('pluginname', 'block_guestbook'));
$editurl = new moodle_url('/blocks/guestbook/gbook.php', array('courseid' => $courseid, 'blockid' => $blockid));
$editnode = $settingsnode->add(get_string('editpage', 'block_guestbook'), $editurl);
$editnode->make_active();

// Обработка GET-запросов: на удаление постов (вместе с комментариями) и отдельных комментариев, на добавление комментария, на редактирование поста
if ( isset($_GET['del']) && is_numeric($_GET['del']) ) {
	$id = (int)$_GET['del'];
	if (!$DB->delete_records('gb_messages', array('id' => $id)))
		print_error('deleteerror', 'block_guestbook');
	if (!$DB->delete_records('gb_comments', array('pid' => $id)))
		print_error('deleteerror', 'block_guestbook');
}

if ( isset($_GET['cdel']) && is_numeric($_GET['cdel']) ) {
	$id = (int)$_GET['cdel'];
	if (!$DB->delete_records('gb_comments', array('id' => $id)))
			print_error('deleteerror', 'block_guestbook');
}

if ( isset($_GET['pid']) && is_numeric($_GET['pid']) ) 
	$pid = (int)$_GET['pid'];
else
	$pid = 0;

if ($pid) {
	$posttocom = $DB->get_record('gb_messages', array('id' => $pid));
	if (!$posttocom) {
		print_error('noposterror', 'block_guestbook');
    	redirect($gbookurl);
	}

	// Изменение поля заголовка динамической формы, в данном случае, на строку "Комментировать"
	$toform['displayinfo'] = get_string('commentpost', 'block_guestbook');
}

if ( isset($_GET['edit']) && is_numeric($_GET['edit']) )
	$editid = (int)$_GET['edit'];
else
	$editid = 0;

// Создание экземпляра формы
$gb = new gbook_form();

if ($editid) {
	$content = $DB->get_record('gb_messages', array('id' => $editid));
	if (!$content) {
		print_error('noposterror', 'block_guestbook');
    	redirect($gbookurl);
	}

	// Подготовка значений полей для операции редактирования поста в динамической форме
	$post = $content->post;
	$name = $content->name;
	$arrfromstring = array();
	$arrfromstring['text'] = $post;
	$arrfromstring['format'] = 1;
	$toform['post'] = $arrfromstring;
	$toform['name'] = $name;
	$toform['displayinfo'] = get_string('editpost', 'block_guestbook');
}

$toform['id'] = $editid;
$toform['pid'] = $pid;
$toform['blockid'] = $blockid;
$toform['courseid'] = $courseid;

// Регистрация значений полей в объекте формы
$gb->set_data($toform);

// Обработка значений POST-запроса из формы
// Если нажата кнопка "Отмена"
if($gb->is_cancelled()) {

	redirect($gbookurl);

// Если были переданы данные из формы
} else if ($fromform = $gb->get_data()) {

	// В поле "post" формы данные хранятся в ассоциативном массиве, сам введенный пользователем текст - в ячейке 'text'
	// Поскольку для очистки и экранирования введенных данных используется функция mysqli_escape_string(), данные нужно привести к типу строки
	$fromform->post = $fromform->post['text'];

	// При сохранении комментария
	if ($fromform->pid) {
		$fromform->comment = $fromform->post;
		$fromform->datetime = time();
		if ( !$DB->insert_record('gb_comments', $fromform) ) 
	    	print_error('inserterror', 'block_guestbook');

	// При обновлении поста
	} else if ($fromform->id) {
		if (!$DB->update_record('gb_messages', $fromform)) 
			print_error('updateposterror', 'block_guestbook');

	// При добавлении поста
	} else {
		$fromform->datetime = time();
		if ( !$DB->insert_record('gb_messages', $fromform) ) 
	    	print_error('inserterror', 'block_guestbook');

	}

    redirect($gbookurl);

// При первом отображении формы или если не прошла валидация данных
} else {

	// Вывод блока заголовка страницы
    echo $OUTPUT->header();

	// При добавлении комментария, сверху выводим выбранный пост и все уже имеющиеся комментарии к нему 
	if ($pid) {
	$postname = $posttocom->name;
	$postmessage = $posttocom->post;
	$dt = date("d-m-Y H:i:s", $posttocom->datetime);

	echo '<table align="center" border="1" frame="hsides" width="100%" cellpadding="10px">';

	echo <<<POST_CELL
	<tr>
		<td bgcolor="#ddd">
			<p>
				<b>$postname</b>  ($dt)
				<br />$postmessage
			</p>	
		</td>
	</tr>
POST_CELL;
	
	$comments = $DB->get_records('gb_comments', array('pid' => $pid));
							 
	foreach($comments as $comment){
		$cid = $comment->id;
		$cname = $comment->name;
		$cmessage = $comment->comment;
		$cpid = $comment->pid;
		$cdt = date("d-m-Y H:i:s", $comment->datetime);
		
		echo <<<POST_COMMENTS
		<tr>
			<td bgcolor="#fff">
				<p>
					<b>$cname</b> ($cdt)
					<br>$cmessage
				</p>
			</td>
		</tr>
POST_COMMENTS;
	}

	echo '</table><br>'; 

	// Вывод формы
	$gb->display();

	// В остальных случаях, выводим форму и под ней таблицу с постами и комментариями 
	// Посты выводятся в порядке "чем новее, тем выше", комментарии - в порядке добавления
	} else {

	$gb->display();

	$gbposts = $DB->get_records('gb_messages', null, 'id DESC');

	echo "<p>Всего постов в Гостевой книге: ".count($gbposts)."</p>";

	echo '<table align="center" border="1" frame="hsides" width="100%" cellpadding="10px">';

	foreach($gbposts as $gbpost){
		$id = $gbpost->id;
		$postname = $gbpost->name;
		$postmessage = $gbpost->post;
		$dt = date("d-m-Y H:i:s", $gbpost->datetime);

	echo <<<TABLE_CELL
		<tr>
			<td bgcolor="#ddd">
		<p>
			<b>$postname</b>  ($dt)
			<br />$postmessage
		</p>
		<p align="right">
			<a href="$gbookurl?edit=$id">Редактировать</a>  |  
			<a href="$gbookurl?del=$id">Удалить</a>  | 
			<a href="$gbookurl?pid=$id">Комментировать</a>
		</p>
			</td>
		</tr>
TABLE_CELL;
	
		$comments = $DB->get_records('gb_comments', array('pid' => $id));
							 
		foreach($comments as $comment){
			$cid = $comment->id;
			$cname = $comment->name;
			$cmessage = $comment->comment;
			$cpid = $comment->pid;
			$cdt = date("d-m-Y H:i:s", $comment->datetime);
		
			echo <<<COMMENTS
			<tr>
				<td bgcolor="#fff">
					<p>
						<b>$cname</b> ($cdt)
						<br>$cmessage
					</p>
					<p align="right">
						<a href="$gbookurl?cdel=$cid">Удалить</a>
					</p>
				</td>
			</tr>
COMMENTS;
		}
	}
	echo '</table><br>';
}
	
	// Вывод нижнего блока страницы							 
    echo $OUTPUT->footer();

}

?>
